<!-- 模块卡片组件 - 提供可复用的功能模块展示卡片 -->
<template>
  <div 
    class="module-card"
    @click="handleClick"
  >
    <h3>{{ title }}</h3>
    <p>{{ desc }}</p>
  </div>
</template>

<script setup lang="ts">
import { defineProps, defineEmits } from 'vue'

// 定义组件的props并获取id
const props = defineProps<{
  id: string
  title: string
  desc: string
}>()

// 定义组件的事件
const emit = defineEmits<{
  (e: 'click', id: string): void
}>()

// 处理点击事件
const handleClick = () => {
  emit('click', props.id)
}
</script>

<style scoped>
/* 响应式正方形卡片 - 专业比例设计 */
.module-card {
  background: white;
  border-radius: 8px;
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
  transition: transform 0.3s, box-shadow 0.3s;  /* transition: 平滑动画过渡 */
  cursor: pointer;
  
  /* 正方形核心：宽高比1:1 */
  aspect-ratio: 1 / 1;  /* aspect-ratio: CSS函数，强制元素保持正方形比例 */
  
  /* Flexbox居中：让内容垂直水平居中 */
  display: flex;                    /* display: flex - 启用弹性布局 */
  flex-direction: column;         /* flex-direction: column - 垂直排列子元素 */
  justify-content: center;        /* justify-content: center - 垂直方向居中 */
  align-items: center;            /* align-items: center - 水平方向居中 */
  text-align: center;             /* text-align: center - 文字居中 */
  
  /* 响应式内边距 */
  padding: 20px;  /* 默认小内边距 */
}

/* 平板及以上：恢复大内边距 */
@media (min-width: 768px) {
  .module-card {
    padding: 30px;  /* 大屏大内边距 */
  }
}

/* 正方形卡片响应式优化 */
@media (max-width: 767px) {
  /* 移动端小屏幕：减小字体以适应正方形 */
  .module-card h3 {
    font-size: 18px;  /* 比原来的20px略小 */
    margin-bottom: 8px;
  }
  
  .module-card p {
    font-size: 12px;  /* 比原来的14px略小 */
  }
}

@media (min-width: 768px) and (max-width: 1023px) {
  /* 平板：适中字体 */
  .module-card h3 {
    font-size: 19px;
  }
  
  .module-card p {
    font-size: 13px;
  }
}

/*卡片悬浮阴影*/
.module-card:hover {
  transform: translateY(-5px);
  box-shadow: 0 4px 16px rgba(0, 0, 0, 0.15);
}

/*卡片标题*/
.module-card h3 {
  color: #667eea;
  margin: 0 0 10px 0;
  font-size: 20px;
}

/*卡片内容*/
.module-card p {
  color: #666;
  margin: 0;
  font-size: 14px;
}
</style>